The disclosure is in the area of computer programming, or coding, specifically in the means to search and effectively retrieve relevant and useful sections of textual code via a personalized natural language search engine.
The task of writing computer code presents a number of challenges, not least the process of writing a series of precise instructions to be read, interpreted and/or compiled according to a series of software rules. “Software” refers to logic implemented as instructions to a programmable device or component of a device (e.g., a programmable processor, controller). Software can be source code, object code, executable code, machine language code. Unless otherwise indicated by context, software shall be understood to mean the embodiment of said code in a machine memory or hardware component, including “firmware” and micro-code. A variety of computer code languages have developed over time to meet particular software needs or requirements and must be thoroughly understood by practitioners for their programs to run properly. The knowledge base of said practitioners may be specific to a language, or span multiple languages, and relies on previously learned information about the structure, commands, conditionals, logic, data handling mechanisms, and so on, of each language.
Because writing computer code with only rudimentary background knowledge of a programming language is particularly challenging, reference libraries of subroutines, algorithms, and functions are often available to programmers both before and during the coding process. Said libraries, however, only provide syntax understandable to downstream processes (e.g., compilers, linkers and the like) when the code is converted to an executable computer application and must additionally be part of a programmer's personal knowledge base. Previously written computer source code—either from a database within an organization or a publicly available source—applicable to a specific code writing context may be available to a programmer willing to access said source code through reference documents, but said programmer must still have prior knowledge of how a computer code section (“snippet”) applies to a given context and know that such context-specific code actually exists.
Without a means of accessing context-specific source code during the programming process, a programmer must therefore necessarily rely on personal knowledge and/or potentially laborious and time-intensive look-up methods. Moreover, a source code database from within the programmer's organization that could be useful in a particular context may be theoretically accessible, but a programmer must again know that such source code libraries exist and have prior knowledge of their applicability. Even then, the knowledge is bounded to the programmer or his/her group or organization.
An additional difficulty for programmers is the lack of organizational or industry customization of a source code database. Source code reference libraries may be available for various code-writing contexts, but these are often general in nature (e.g., commands or functions listed alphabetically or categorically organized) and further categorized by computer language type (e.g., C, Java, Python, etc.). Code previously written for specific functional purposes of an organization or industry may be available—but would once again rely on a programmer's prior knowledge and/or an additional search interface requiring specific input parameters. Even code with embedded descriptive comments would rely on an experienced programmer's knowledge of search terms.
Programmer experience, or lack thereof, therefore also affects an organization's overall speed, efficiency and accuracy of source code creation. Inexperienced programmers often require access to a more experienced colleague for some time in order to understand the code in a project before acquiring the capacity of adding value to a project. Experience also helps to form coding context associations, e.g., how sections of code relate to one another, and inexperienced programmers often need to make these mental associations from time-intensive practice, study, and/or mentorship.
A need therefore exists for a rapid, context-specific, relational, and customizable computer code location and retrieval mechanism. Augmented coding tools could enhance code development experience, increase coding speed and quality, and promote best practices in a specific context. Said tools could also be customized for different contexts and/or clients and be a significant advance in programmer training and contextual experience.